Data storage systems are arrangements of hardware and software that include storage processors coupled to arrays of non-volatile storage devices, such as magnetic disk drives, electronic flash drives, and/or optical drives, for example. The storage processors service storage requests, arriving from host machines (“hosts”), which specify files or other data elements to be written, read, created, deleted, and so forth. Software running on the storage processors manages incoming storage requests and performs various data processing tasks to organize and secure the data elements stored on the non-volatile storage devices.
Data storage systems commonly provide disk drives in arrangements called “RAID groups” (RAID is an acronym for Redundant Array of Independent Disks). Common RAID configurations mirror data between disk drives and/or provide parity segments to establish redundancy. Mirroring and parity enable a RAID group to suffer a failure of a disk drive without experiencing data loss. For example, a system using RAID mirroring may access data of a failed disk drive from a surviving mirror drive. A system using parity may compute missing data based on a combination of data from surviving drives, e.g., by performing exclusive-OR operations on corresponding elements of the surviving drives.
When a disk drive in a RAID group fails, RAID protocols may initiate a repair operation. For example, a system may swap out the failed drive with a spare and begin copying data to the spare drive. In cases where parity is used, the system may compute data for the spare drive from remaining drives and store the computed data in the spare drive. These actions have the effect of restoring redundancy to the RAID group, such that it can suffer another disk drive failure without experiencing data loss.